﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace HelpDesk
{
    public class QueryBuilder
    {
        #region Ejecuitar_No_Querys
        public void EjecutarNoQuery(string sql)
        {
            Conectar con = new Conectar(); //Se crea un nuevo objeto de Conexion

            OleDbConnection myconnection = new OleDbConnection(con.CadenaConexion()); //Se crea el objeto ODBC pasando como parametro el String Connection
            try
            {
                myconnection.Open(); //Se abre la conexion
            }
            catch (Exception e) { e.ToString(); }


            OleDbCommand mycommand = myconnection.CreateCommand(); //Se crea el comando SQL a partir del string
            OleDbTransaction mytrans; //Se crea el objeto Transaccion

            mytrans = myconnection.BeginTransaction(); //Comienza la transaccion
            mycommand.Connection = myconnection; //Se relaciona el comando SQL con la conexion
            mycommand.Transaction = mytrans; //Se relaciona la transaccion

            try
            {
                mycommand.CommandText = sql; //Se relaciona el Comando SQL con el string
                mycommand.ExecuteNonQuery(); //Se ejecuta el Query SQL
                mytrans.Commit(); //Se compromete la transaccion
            }
            catch // Si falla
            {
                try
                {
                    mytrans.Rollback(); //Se hace un rollback de la transaccion
                }
                catch (Exception e) { e.ToString(); } 
            }
            myconnection.Close(); //Se cierra la conexion

        }
        #endregion

        #region Ejecutar_Querys
        public DataTable EjecutarQuery(string sql) //Se manda el sql y el campo(columna) de la cual se quieren leer los datos
        {
            DataTable Datos = new DataTable();
            Conectar con = new Conectar();
            OleDbConnection myconnection = new OleDbConnection(con.CadenaConexion()); //String connection
            OleDbCommand mycommand = new OleDbCommand(sql, myconnection); //Comando SQL
            
            try
            {
                myconnection.Open(); //Se abre la conexion
            }

            catch (Exception e) { e.ToString(); } //si ocurre algún error en la conexión a la BD

            try
            {
                OleDbDataAdapter qu;
                DataSet ds = new DataSet();
                qu = new OleDbDataAdapter(sql, myconnection);
                qu.Fill(ds);
                myconnection.Close(); //Cierra la conexion
                Datos = ds.Tables[0]; //Obtiene el Valor del Campo de la Consulta
            }
            catch (Exception e)
            { e.ToString(); } //si ocurre algún error al momento de recibir los datos de la BD
            return Datos;
        }
        #endregion
    }
}
